#!/usr/bin/env python3
"""
脚本用于替换Swift文件中的字符串常量
将 "xxxx" 替换为 "PREFIX_xxxx".PREFIXRemove()
支持自定义文件路径和前缀
"""

import os
import re
import argparse

def replace_strings_in_file(file_path, prefix="CloverPostVideo"):
    """替换单个文件中的字符串"""
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()

        original_content = content

        # 正则表达式匹配双引号字符串，但排除已经被替换过的
        # 避免重复替换已经包含指定前缀的字符串
        pattern = rf'"([^"]*)"(?!\.{prefix}Remove\(\))'

        def replacement(match):
            string_content = match.group(1)
            # 跳过空字符串
            if not string_content:
                return f'""'
            # 跳过已经包含指定前缀的字符串
            if f'{prefix}_' in string_content:
                return match.group(0)
            # 进行替换
            return f'"{prefix}_{string_content}".{prefix}Remove()'

        # 执行替换
        new_content = re.sub(pattern, replacement, content)

        # 如果内容有变化，写回文件
        if new_content != original_content:
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(new_content)
            print(f"✅ 已处理: {file_path}")
            return True
        else:
            print(f"⏭️  无需处理: {file_path}")
            return False

    except Exception as e:
        print(f"❌ 处理文件时出错 {file_path}: {e}")
        return False

def find_swift_files(directory):
    """查找所有Swift文件"""
    swift_files = []
    for root, _, files in os.walk(directory):
        for file in files:
            if file.endswith('.swift'):
                swift_files.append(os.path.join(root, file))
    return swift_files

def get_user_input():
    """获取用户输入的目录路径和前缀"""
    print("=== Swift字符串替换工具 ===")

    # 获取目录路径
    print("拖入文件夹路径")
    target_dir = input().strip()

    # 如果为空，使用当前目录
    if not target_dir:
        target_dir = os.getcwd()
        print(f"使用当前目录: {target_dir}")

    # 清理路径（移除可能的引号）
    target_dir = target_dir.strip('"').strip("'")

    if not os.path.exists(target_dir):
        print(f"❌ 目录不存在: {target_dir}")
        return None, None

    # 获取前缀
    print("输入前缀名称")
    prefix = input().strip()

    # 如果为空，使用默认前缀
    if not prefix:
        prefix = "CloverPostVideo"
        print(f"使用默认前缀: {prefix}")

    return target_dir, prefix

def main():
    """主函数"""
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='替换Swift文件中的字符串常量')
    parser.add_argument('-d', '--directory', help='要处理的目录路径')
    parser.add_argument('-p', '--prefix', default='CloverPostVideo', help='字符串前缀 (默认: CloverPostVideo)')
    parser.add_argument('--auto', action='store_true', help='自动模式，跳过确认提示')

    args = parser.parse_args()

    # 获取目录和前缀
    if args.directory:
        target_dir = args.directory
        prefix = args.prefix
        print(f"🔍 使用命令行参数 - 目录: {target_dir}, 前缀: {prefix}")
    else:
        target_dir, prefix = get_user_input()
        if not target_dir or not prefix:
            return

    # 验证目录存在
    if not os.path.exists(target_dir):
        print(f"❌ 目录不存在: {target_dir}")
        return

    print(f"🔍 在目录中搜索Swift文件: {target_dir}")
    print(f"🏷️  使用前缀: {prefix}")

    # 查找所有Swift文件
    swift_files = find_swift_files(target_dir)

    if not swift_files:
        print("❌ 未找到Swift文件")
        return

    print(f"📁 找到 {len(swift_files)} 个Swift文件")

    # 询问用户确认 (除非是自动模式)
    if not args.auto:
        response = input("🤔 是否继续进行字符串替换? (y/N): ")
        if response.lower() not in ['y', 'yes']:
            print("❌ 操作已取消")
            return

    # 处理每个文件
    processed_count = 0
    for file_path in swift_files:
        if replace_strings_in_file(file_path, prefix):
            processed_count += 1

    print(f"\n✅ 完成! 共处理了 {processed_count} 个文件")

if __name__ == "__main__":
    main()